/* ============================================================================
* 功能描述 ：按键函数实现
* 作者       ：ggls
* 创建日期 ：2024.5.22
* ----------------------------------------------------------------------------
* 更新历史 ：
*	日期 　　- 修改者   : 更新内容描述
*
* ============================================================================
*/


#include "main.h"




u8 time = 0, mode = 0; // 系统变量

u8 key = 0; // 键值


bit key_flag1 = 0, key_flag2 = 0; // 按键标志

u8 key_dat = 0; // 按键值，防锁定

u8 key_num = 0;

u16 key_time = 0; // 按键计时

char key_flag;


void Hly_Key_Init(void)
{
	/* 设置io功能 */
//	GPIO_SET_MUX_MODE(P30CFG, GPIO_MUX_GPIO);		//设置P30为GPIO模式
	GPIO_ENABLE_INPUT(P3TRIS, GPIO_PIN_0);			//设置为输入模式
	GPIO_ENABLE_UP(P3UP, GPIO_PIN_0);				//开启下拉
	


	/* 设置中断方式 */
//	GPIO_SET_INT_MODE(P23EICFG, GPIO_INT_FALLING);	//设置为下降沿中断模式
//	GPIO_EnableInt(GPIO3, GPIO_PIN_0_MSK);			//开启P30中断

//	P30 = 1;
	/*
	(3)设置中断优先级
	*/
	//IRQ_SET_PRIORITY(IRQ_P3, IRQ_PRIORITY_LOW);
	/*
	(4)开启总中断
	*/	
//	IRQ_ALL_ENABLE();

	
}



void key_scan(void) // 按键检测,1短按，2双击，3长按
{
#if 0
    if (P30 == 0 && (key_flag1 == 0)) // 按钮按下
    {

        key_flag1 = 1;
    }
    if (key_flag1 == 1)
    {

        delayms(1);
		key_time++;
        if (key_time < 500) // 按键计时
        {

            if (P30 == 0 && (key_flag2 == 0))
            {
                key_flag2 = 1;
                key_dat++;
            }
            if (P30 == 1)
            {
                key_flag2 = 0;
            }
        }
		if(key_time >= 5000)
		{
			_data3_tx_pack();
		}

        else
        {

            key_flag2 = 0;

            if (P30 == 0 && (key_dat == 1)) // 长按
            {

                key_dat = 0;
                if (key_num != 3)
                {

                    key_num = 3;
                }
               
            }
            if (P30 == 1 && (key_dat > 0))
            {

                if (key_num != key_dat) // 单击双击
                {
                   if(key_dat == 1)
                   {
					   _data_tx_pack(); 	 
				   }
				    if(key_dat == 2)
                   {
					   _data2_tx_pack(); 	 
				   }
                    key_dat = 0;
                }
            }

            if (P30 == 1) // 按键复位
            {

                key_flag1 = 0;
                key_time = 0;
                key_dat = 0;
            }
        }
    }

#else
	if(P30 == 0)
	{
		delayms(10);  // 防抖


		if(P30 == 0)
		{
			
			key_flag = 1;
		}
		
	}
	else
	{
		delayms(10);        
		if(P30 == 1 && key_flag == 1 )   //检测弹起
		{
		#if 0
			signed short t, h;
			char t1[5],h1[3],niubi;
			_data_tx_pack();             //弹起后处理任务
			niubi = SHT4XReadTemperatureAndHumidity(&t, &h);
			if(niubi == 1)
			{
				t1[0] = SHORT_GET_HIGH_BYTE(t);
				t1[1] = SHORT_GET_LOW_BYTE(t);
				
				t1[2] = SHORT_GET_HIGH_BYTE(h);
				t1[3] = SHORT_GET_LOW_BYTE(h);
				Uart_Tx_buf(t1, 4);
			}
		#else	
			
		Hly_Temp_Hum_Obtain();
	//	Seg_Set_Data();
		#endif	
		key_flag = 0;
		}			
	}
#endif

}



